function NotchBeamPlastic
clc
%close all
addpath('../');
addpath('../../');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read mesh
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
projDir = '/home/hbui/kratos_janosch';
%coarse (structure) mesh
projName = 'notchbeam.gid';
fn = [projDir '/' projName '/' 'mesh1.msh'];

mg = fem2.gid.GidMeshGenerator(fn);
mesh = mg.getMesh(2);
mesh.setNumberOfFields(2);
%set id for nodes
for i=1:mesh.countNodes()
    mesh.getNode(i-1).setId(i);
end
%set id for faces
for i=1:mesh.countFaces()
    mesh.getFace(i-1).setId(i);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% conditions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lambda = linspace(0,1,30);
du = 3;
meshUtil = fem2.MeshUtilities(mesh);
c1 = fem2.Constraint([0 0]);
c2 = fem2.Constraint([0 1]);
c3 = fem2.Constraint([0 1]);
c3.setValue(0,du);
edge1 = meshUtil.seekNodesOnSurface(1,0,0);
edge2 = meshUtil.seekNodesOnSurface(1,0,-2);
mesh.setConstraint(c2,edge1);
meshUtil.seekNode([0 0]).setConstraint(c1);
mesh.setConstraint(c3,edge2);
plotMesh(mesh,{'trimesh'});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% element declaration
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M = fem2.Model(mesh);
nf = mesh.countFaces();
E = 2;
nu = 0.3;
ft = 1.9;
H = 0;
K = 2;
for i=1:nf
    e = fem2.MatlabStructuralElement(mesh.getFace(i-1));
    M.addElement(e);
    %create struct to contain element state variables
    es = createElementContainer();
    es.E = E;
    es.nu = nu;
    es.TensileStrength = ft;
    es.KinematicHardeningModulus = H;
    es.IsotropicHardeningModulus = K;
    elements(i) = es;
end
elements = InitializeMaterial(elements,M);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% solve
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:edge1.size()
    edge1nodes(i) = edge1.get(i-1).getId();
end

postProcessInfo.infoList = {'resistant force'};
postProcessInfo.infoParam = {edge1nodes};

[elements,output] = solving_strategy_static_2(elements,M,...
    lambda,50,1e-6,postProcessInfo);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% post process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
res_node_1(:,:) = -output.resistant_force(:,3,:)
delta = lambda*du;
plot(delta,res_node_1);

rmpath('../');
rmpath('../../');
